package BL;

import BE.BEZona;
import DA.DAZona;
import java.sql.ResultSet;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

public class BLZona
{
    //MANTENIMIENTO
    
    private ArrayList<BEZona> lstZonas;
    
    public BLZona()
    {
        lstZonas= new ArrayList<BEZona>();
    }
    
    public void cargar()
    {
        DAZona dAZona = new DAZona();
        setLstZonas(dAZona.obtenerZonas());
    }
    
    
    public void buscaZona (String nombre, int idTipo, int idEstado, JTable tblDatos, int tipoBusqueda)
    {
        DAZona dAZona = new DAZona();
        ResultSet rs = null;

        BEZona zona = new BEZona();
        zona.setNombre(nombre);
        zona.setIdTipo(idTipo);
        zona.setEstado(idEstado);

        rs = dAZona.buscarZona(zona,tipoBusqueda);
        this.llenaTabla(rs, tblDatos);
    }
    
    public void llenaTabla (ResultSet rs, JTable tblDatos)
    {
        BLModelo modelo = new BLModelo();
        tblDatos.setModel(modelo);

        modelo.addColumn("IDZona");
        modelo.addColumn("Nombre");
        modelo.addColumn("Tipo");
        modelo.addColumn("Cant. Racks");
        modelo.addColumn("Descripción");
        modelo.addColumn("Estado");
        //Ocultar columna ID
        tblDatos.getColumnModel().getColumn(0).setMaxWidth(0);
        tblDatos.getColumnModel().getColumn(0).setMinWidth(0);
        tblDatos.getTableHeader().getColumnModel().getColumn(0).setMaxWidth(0);
        tblDatos.getTableHeader().getColumnModel().getColumn(0).setMinWidth(0);

        try
        {
            while (rs.next())
            {
                Object [] fila = new Object[6];
                fila[0] = rs.getObject("IDZONAS");
                fila[1] = rs.getObject(2);
                fila[2] = rs.getObject(6);
                fila[3] = rs.getObject("CANTRACKS");
                fila[4] = rs.getObject("DESCRIPCION");
                fila[5] = rs.getObject("ESTADO");

                if (fila[5].toString().equals("1"))
                    fila[5] = "ACTIVO";
                else
                    fila[5] = "INACTIVO";
                modelo.addRow(fila);
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Error al llenar la tabla",
                                          "Error",JOptionPane.ERROR_MESSAGE);
        }
    }

    public void limpiaTabla (JTable tblDatos)
    {
        DefaultTableModel modelo = new DefaultTableModel();
        tblDatos.setModel(modelo);

        modelo.addColumn("Nombre");
        modelo.addColumn("Tipo");
        modelo.addColumn("Cant. Racks");
        modelo.addColumn("Descripción");
        modelo.addColumn("Estado");
    }

    //AGREGAR ZONA
    public  int agregaZona(String nombre, int idTipo, String descp)
    {
        BEZona zona = new BEZona();
        DAZona daZona = new DAZona();
        BLValidaciones validar = new BLValidaciones();

        if (nombre.equals(""))
            JOptionPane.showMessageDialog(null,"Debe elegir un nombre para la zona",
                                               "Error",JOptionPane.ERROR_MESSAGE);
        else if (idTipo == 0)
            JOptionPane.showMessageDialog(null,"Debe elegir un tipo de zona",
                                               "Error",JOptionPane.ERROR_MESSAGE);
        else if (daZona.existeNombre(validar.validarSqlInjection(nombre)))
            JOptionPane.showMessageDialog(null,"El nombre de producto ya existe",
                                               "Error",JOptionPane.ERROR_MESSAGE);
        else
            if (JOptionPane.showConfirmDialog(null,"¿Desea agregar la zona?",
                "Confirmación",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE) == 0)
            {
                zona.setNombre(validar.validarSqlInjection(nombre));
                zona.setIdTipo(idTipo);
                zona.setDescripcion(validar.validarSqlInjection(descp));
                zona.setEstado(1);
                zona.setCantRack(0);

                return daZona.agregarZona(zona);
            }

        return 1;
    }

    //ELIMINAR
    
    public void agregarZonaCargaMasiva(BEZona zona)
    {
        DAZona dtaZona = new DAZona();
        
        dtaZona.agregarZonaCargaMasiva(zona);
        
        
    }
    
    public void eliminarZona (JTable tblDatos)
    {
        int retorno = 1;
        int fila;
        int columna = 0;
        int idZona;
        DAZona dAZona = new DAZona();

        fila = tblDatos.getSelectedRow();

        if (fila < 0)
            JOptionPane.showMessageDialog(null,"Debe seleccionar una zona para eliminar",
                                          "Información",JOptionPane.INFORMATION_MESSAGE);
        else if (tblDatos.getModel().getValueAt(fila,5).toString().equals("INACTIVO"))
            JOptionPane.showMessageDialog(null,"La zona ya se encuentra INACTIVO",
                                          "Error",JOptionPane.ERROR_MESSAGE);
        else if (JOptionPane.showConfirmDialog(null,"¿Desea eliminar la zona?",
                 "Confirmación",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE) == 0)
        {
            idZona = Integer.parseInt(tblDatos.getModel().getValueAt(fila,columna).toString());
            retorno = dAZona.eliminarZona(idZona);
        }

        if (retorno == 0)
        {
            JOptionPane.showMessageDialog(null,"Se eliminó la zona",
                                          "Información",JOptionPane.INFORMATION_MESSAGE);
            this.limpiaTabla(tblDatos);
            this.buscaZona("",0,0,tblDatos,0);
        }
    }

    //MODIFICAR
    public BEZona getZonabyId (int id)
    {
        DAZona dAZona = new DAZona();
        BEZona zona = dAZona.getZonabyId(id);

        return zona;
    }

    public int modificaZona (BEZona zona, boolean cambio)
    {
        int retorno = 1;
        DAZona daZona = new DAZona();

        if (zona.getNombre().equals(""))
            JOptionPane.showMessageDialog(null,"Debe elegir un nombre para la zona",
                                               "Error",JOptionPane.ERROR_MESSAGE);
        else if (daZona.existeNombre(zona.getNombre()) && cambio)
            JOptionPane.showMessageDialog(null,"El nombre de la zona ya existe",
                                               "Error",JOptionPane.ERROR_MESSAGE);
        else
            if (JOptionPane.showConfirmDialog(null,"¿Desea editar la zona?",
                "Confirmación",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE) == 0)
            {
                retorno = daZona.modificaZona(zona);
            }

        return retorno;
    }

    public ArrayList<BEZona> getLstZonas() {
        return lstZonas;
    }

    public void setLstZonas(ArrayList<BEZona> lstZonas) {
        this.lstZonas = lstZonas;
    }


    public BEZona obtenerZonasByTipo(int idtipo) {

    DAZona dazon = new DAZona();

    return    dazon.obtenerZonasByTipo(idtipo) ; }

    void cargarIdProd(int IdTipoProd) {
        throw new UnsupportedOperationException("Not yet implemented");
    }
}
